PCI Express provides a general purpose interconnect for computing and communicating platforms. PCI Express components communicate over a point-to-point communication channel known as a Link that provides a connection between PCI Express Ports located in each PCI Express component. Packets, such as Transaction layer packets (TLPs), are communicated over the Link according to the PCI Express protocol.
The PCI Express components communicate the packets according to a flow control accounting scheme that is credit based. The flow control credit scheme tracks queue/buffer space available in a receiving PCI Express component in order to prevent overflow of the receiving component buffers and to enable compliance with the PCI Express protocol. The PCI Express protocol requires each PCI Express component to implement credit-based link flow control for each Virtual Channel (VC) on each Port. VCs provide a means to support multiple independent logical data flows over common physical resources of a Link. As such, different data flows can be multiplexed onto a single physical Link. Management of the PCI Express virtual channels and flow control are carried out in the Transactional Layer of the PCI Express architecture.
The PCI Express flow control credit scheme is used to guarantee that a transmitting PCI Express component (a Transmitter) will not send TLPs that a PCI Express receiving component (a Receiver) cannot accept. The PCI Express flow control also helps enable compliance with the ordering rules of PCI Express by maintaining separate flow control buffers and credit pools for the different virtual channels that are maintained for Posted, Non-posted and completion type PCI Express transactions. A PCI Express device maintains six separate flow control credit counters for both header and data for each of the three types of TLPs. Flow control credits are returned from the Receiver to the Transmitter periodically, as the Receiver frees buffer space for each respective packet type.
The PCI Express flow control is done on a per-hop basis wherein flow control information is conveyed between the two components of a Link using Flow Control Packets (FCPs). FCPs are PCI Express Data Link Layer Packets (DLLPs) used to send flow control information, including negotiations and updates, from the Transaction Layer in one PCI Express component to the Transaction Layer in another PCI Express component.
Existing FCPs include data fields that represent the type of credit (posted, non-posted or completion), the type of DLLP (InitFC1, InitFC2 and UpdateFC), the ID of the virtual channel (VC ID) and the header and data flow control credit values. A DLLP is a PCI Express packet that is used to support Link management functions and is generated in the Data Link Layer of the PCI Express architecture.